#include "linechart.h"
#include "ui_linechart.h"
#include <QTimer>
#include <QDateTime>
#include <QDebug>

LineChart::LineChart(QWidget* parent) :
    QWidget(parent),
    ui(new Ui::LineChart),
    dataSize(50),  // 数据窗口大小
    paused(true)   // 初始化为暂停状态
{
    ui->setupUi(this);
    zhexianDome();
}

LineChart::~LineChart()
{
    delete ui;
}

void LineChart::zhexianDome()
{
    // 初始化数据
    x.resize(dataSize);
    current.resize(dataSize);
    voltage.resize(dataSize);
    power.resize(dataSize);

    // 设置初始数据（填充为 0）
    for (int i = 0; i < dataSize; ++i) {
        x[i] = QDateTime::currentDateTime().toMSecsSinceEpoch() / 1000.0 - (dataSize - i);  // 时间轴
        current[i] = 0;
        voltage[i] = 0;
        power[i] = 0;
    }

    // 添加三条折线（电流、电压、功率）
    ui->widget->addGraph();  // 电流
    ui->widget->graph(0)->setName("电流");
    ui->widget->graph(0)->setPen(QPen(Qt::blue));

    ui->widget->addGraph();  // 电压
    ui->widget->graph(1)->setName("电压");
    ui->widget->graph(1)->setPen(QPen(Qt::red));

    ui->widget->addGraph();  // 功率
    ui->widget->graph(2)->setName("功率");
    ui->widget->graph(2)->setPen(QPen(Qt::green));

    // 设置轴标签
    ui->widget->xAxis->setLabel("时间");
    ui->widget->yAxis->setLabel("值");

    // 设置图例显示
    ui->widget->legend->setVisible(true);

    // 设置时间轴为日期时间格式
    QSharedPointer<QCPAxisTickerDateTime> dateTimeTicker(new QCPAxisTickerDateTime);
    dateTimeTicker->setDateTimeFormat("yyyy-MM-dd \nhh:mm:ss");  // 设置日期和时间格式
    ui->widget->xAxis->setTicker(dateTimeTicker);  // 设置时间轴格式

    // 设置轴范围
    ui->widget->xAxis->setRange(x.first(), x.last());
    ui->widget->yAxis->setRange(0, 100);

    // 创建定时器
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &LineChart::updateData);

    // 启动定时器，每秒更新一次数据
    timer->start(1000);

    // 启用缩放和拖动功能
    ui->widget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
    disconnect(ui->controlButton, &QPushButton::clicked, this, &LineChart::on_controlButton_clicked);


    // 连接控制按钮的点击事件
    connect(ui->controlButton, &QPushButton::clicked, this, &LineChart::on_controlButton_clicked);

    // 设置按钮初始文本
    ui->controlButton->setText("开始");
}

QPushButton* LineChart::getControlButton()
{
    return ui->controlButton;
}

void LineChart::updateData()
{
    //qDebug() << "进入 updateData";

    // 获取当前时间作为 X 值
    double currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch() / 1000.0;

    if (paused) {
        // 如果暂停，所有数据为 0
        x.append(currentTime);
        current.append(0);
        voltage.append(0);
        power.append(0);
    } else {
        // 正常更新数据
        double newCurrent = qrand() % 50;   // 模拟电流数据
        double newVoltage = qrand() % 220; // 模拟电压数据
        double newPower = newCurrent * (newVoltage / 100.0); // 模拟功率数据

        x.append(currentTime);
        current.append(newCurrent);
        voltage.append(newVoltage);
        power.append(newPower);
    }

    // 维持固定数据窗口大小
    if (x.size() > dataSize) {
        x.removeFirst();
        current.removeFirst();
        voltage.removeFirst();
        power.removeFirst();
    }

    // 更新图表数据
    ui->widget->graph(0)->setData(x, current);
    ui->widget->graph(1)->setData(x, voltage);
    ui->widget->graph(2)->setData(x, power);

    // 更新 X 轴范围
    ui->widget->xAxis->setRange(x.first(), x.last());

    // 重新绘制图表
    ui->widget->replot();
}
void LineChart::on_controlButton_clicked()
{
    count++;
    if(count/2 % 2 == 0){
        if (ui->controlButton->text() == "开始") {
            ui->controlButton->setText("暂停");
            // 如果当前是暂停状态，则开始更新
            paused = false;

            qDebug() << "恢复数据更新";
        }
    }
   else if(count/2 % 2 != 0){
     if(ui->controlButton->text() == "暂停") {
        ui->controlButton->setText("开始");
        // 如果当前是更新状态，则暂停更新
        paused = true;

        qDebug() << "暂停数据更新";
    }
}
}

